Hi,
nee, da muss doch gar keine Schleife! Was ich da gemacht habe gefällt mir nicht mehr wirklich! Mir gefällt dieser Code aus mehreren Gründen viel besser:
Option Explicit
Private Sub TextBox1_Change()
With TextBox1
If Right(.Text, 4) Like "A###" Then
Application.EnableEvents = False
.Value = ersetze_Abkuerzungen(.Text)
Application.EnableEvents = True
Cells(1, 1).Value = .Text
End If
End With
End Sub
Function ersetze_Abkuerzungen(ByVal txt As String) As String
Static Dic As Object
'Alle Abkurzungen und Langtexte in ein Dictionary
If Dic Is Nothing Then
Set Dic = CreateObject("Scripting.Dictionary")
Dic.Add "A123", "Kunde anschreiben"
Dic.Add "A124", "blabla4"
Dic.Add "A125", "blabla5"
'Dic.Add ..., ...
End If
'wenn A### am Ende des Textes im Dictionary, dann ersetzen:
If Dic.Exists(Right(txt, 4)) Then
txt = Mid(txt, 1, Len(txt) - 4) & Dic(Right(txt, 4))
End If
ersetze_Abkuerzungen = txt
End Function
Gründe:
1. Viel übersichtlicher, sofort im Code erkennbar, welche Abkürzung zu welchem Langtext gehört
2. Leichter anzupassen was das Erweitern / Ändern der Abkürzungen - Langtexte betrifft.
Für das Erweitern einfach eine solche Zeile hinzufügen:
Dic.Add Abkürzung, Langtext
dabei sind "Abkürzung" und "Langtext" wieder Zeichenketten (Strings, entsprechend mit " zu versehen).
2. keine Schleife
3. Das Dictionary wird nur einmalig in einer Instanz der Userform gefüllt (static...!). (Wenn dir das jetzt nichts sagt, dann ist das ok :-) )
4. Insgesamt relativ wenig Code, der bei einem Tastendruck ausgeführt wird.
Und ich find cool, dass es bei mir gut läuft - warum auch immer es neulich nicht so wollte.
Grüße Ulrich
|